/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.pb.sistcomp.dao;



import br.pb.sistcomp.entity.Produto;
import br.pb.sistcomp.entity.Venda;
import br.pb.sistcomp.exception.ErroAoRemoverException;
import br.pb.sistcomp.exception.ErroAoSalvarException;
import br.pb.sistcomp.util.HibernateUtil;
import java.util.List;
import javax.persistence.EntityManager;
/**
 * Class that represents an entity in the system
 * @author fagner , fagner.silva@sistcomp.com.br
 * @version 1.0
 * Copyright (C) 2011 SistComp.
 */
public class ProdutoDaoImpl implements ProdutoDao{

    private  EntityManager em = HibernateUtil.getInstance().getFactory().createEntityManager();    
    /**
    *   method constructs this class 
    */
    public ProdutoDaoImpl() {} 
    /**
    *   Method call for registration of products in database 
    */
    
    @Override
    public void cadastrarProduto(Produto produto) throws ErroAoSalvarException {        
        try{
            em.getTransaction().begin();            
            em.persist(produto);        
            em.getTransaction().commit();          
            
        }catch(Exception erro){
            em.getTransaction().rollback();
            throw  new ErroAoSalvarException();
            
        }
    
    }
    /**
    *   Method to remove products from database
    */
    @Override
    public void removerProduto(Produto produto) throws ErroAoRemoverException {       
        try{
            em.getTransaction().begin();
            //em.remove (buscarProduto(produto.getId()));
            em.remove(produto);
            em.getTransaction().commit();             
        }catch(Exception erro){
            em.getTransaction().rollback();
            throw new ErroAoRemoverException();
        }                
    }
    /**
    *   Class that represents an entity in the system
    */
    @Override
    public Produto buscarProduto(int id) {
        return em.find(Produto.class, id);  
                
    }
    /**
    *   Method to list all the products of the Bank of Dados
    */
    @Override
    public List<Produto> listarTodos() {
                  
            return em.createQuery("SELECT c FROM Produto c").getResultList();
            
    }

    @Override
    public List<Venda> listarVendidos() {
        return em.createQuery("SELECT c from Venda c WHERE status = 'Vendido'").getResultList();
       
    }
    
}
